#include "myhead.h"

int main()
{
	int semid;
	struct sembuf pbuf;
	bzero(&pbuf,sizeof(pbuf));
	pbuf.sem_num=1; //对第二个信号量操作
	pbuf.sem_op=-1; //p操作
	pbuf.sem_flg=SEM_UNDO; 
	
	
	struct sembuf vbuf;
	bzero(&vbuf,sizeof(vbuf));
	vbuf.sem_num=0; //对第一个信号量操作
	vbuf.sem_op=1; //v操作
	vbuf.sem_flg=SEM_UNDO; 
	//申请两个信号量(办两张卡)
	semid=semget(7545,2,IPC_CREAT|IPC_EXCL|0777);
	if(semid==-1)
	{
		if(errno==EEXIST)
			semid=semget(7545,2,0777);
		else{
			perror("失败");
			return -1;
		}
	}

//----------------------------------------------
	//对话所用
	char spe_buf[100];
	bzero(spe_buf,sizeof(spe_buf));

	int fd = open("spe.txt",O_RDWR|O_CREAT|O_YRUNC,0777);
	if(fd == -1)
	{
		perror("打开spe对话文件失败\n");
		return -1;
	}


	
	//侄子抢糖果
	while(1)
	{
		//对第二个信号量p操作
		semop(semid,&pbuf,1);

		/*printf("侄子抢到糖果了!\n");*/
		sleep(1);
		//拯救侄子，让他不要阻塞了,对第一个信号量做v操作
		semop(semid,&vbuf,1);

		read(fd,spe_buf,sizeof(spe_buf));

		printf("收到侄子的话：%s ",spe_buf);
	}

	close(fd);
}